package com.helin.helinhealth.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.time.LocalDateTime;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * <p>
 * 药品实体类
 * </p>
 * 
 * <p>
 * 该实体类对应数据库中的 medicine 表，用于存储老人的药品信息，
 * 包括药品名称、服用时间、是否已服用、剩余天数等。
 * 支持老人端查看药品列表、服药提醒和子女端远程监控等功能。
 * </p>
 *
 * @author HuangHaihang
 * @since 2025-04-25
 */
@Data
@TableName("medicine")
@Schema(description = "药品表")
public class Medicine implements Serializable {

    /**
     * 序列化版本ID
     */
    private static final long serialVersionUID = 1L;

    /**
     * 默认无参构造函数
     */
    public Medicine() {
    }

    /**
     * 带参构造函数，用于从JSON字符串创建实例
     * 
     * @param json JSON字符串
     */
    public Medicine(String json) {
        // 用于从JSON字符串创建实例
    }

    /**
     * 药品ID，自增主键
     */
    @Schema(description = "药品ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 关联用户的微信openid，外键关联user表
     */
    @Schema(description = "关联用户openid")
    @TableField("user_id")
    private String userId;

    /**
     * 药品名称，如"阿司匹林"、"降压药"等
     */
    @Schema(description = "药品名称")
    @TableField("name")
    private String name;

    /**
     * 服药时间，格式为"08:00,12:00,20:00"，多个时间点用逗号分隔
     */
    @Schema(description = "服药时间（格式：08:00,12:00,20:00）")
    @TableField("time")
    private String time;

    /**
     * 服用剂量，如"1片/次"、"2粒/次"等
     */
    @Schema(description = "服用剂量")
    @TableField("dosage")
    private String dosage;

    /**
     * 是否已服用，true表示已服用，false表示未服用
     */
    @Schema(description = "是否已服用")
    @TableField("is_taken")
    private Boolean isTaken;

    /**
     * 剩余天数，用于提醒用户及时补充药品
     */
    @Schema(description = "剩余天数")
    @TableField("stock_days")
    private Integer stockDays;

    /**
     * 创建时间，记录药品信息首次添加的时间
     */
    @Schema(description = "创建时间")
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间，记录药品信息最后一次更新的时间
     */
    @Schema(description = "更新时间")
    @TableField("update_time")
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标记，0表示未删除，1表示已删除
     */
    @Schema(description = "逻辑删除标记")
    @TableField("is_deleted")
    @TableLogic
    private Boolean isDeleted;

    /**
     * 乐观锁版本号，用于并发控制
     */
    @Schema(description = "乐观锁版本号")
    @TableField("version")
    private Integer version;
}
